﻿/*di Carbone Carlo-carbone05@gmail.com
 * */

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using BadgeManager.Model;

namespace BadgeManager.Controller
{
    public class ctrlMovimentiTessere : MovimentoTessera
    {
        #region "Dichiarazioni d'amore"

        private Connector Connessione;
        private string sql;

        public enum Inserimento
        {
            Successo,
            NoElementi,
            Errore
        }

        public enum Cancellazione
        {
            Successo,
            NoElementi,
            Errore
        }

        public enum Aggiornamento
        {
            Successo,
            NoElementi,
            Errore
        }

        #endregion "Dichiarazioni d'amore"

        #region "Costruttore Edile"

        public ctrlMovimentiTessere()
        {
            this.Connessione = Connector.Istance();
            sql = "";
        }

        #endregion "Costruttore Edile"

        #region "Metodi"

        /// <summary>
        /// Seleziona dalla tabella MovimentiTessere
        /// </summary>
        /// <param name="campi"></param>
        /// <param name="condizione"></param>
        /// <param name="ordinamento"></param>
        /// <returns>Un Datatable(stupendo)</returns>
        public DataTable Seleziona(string campi, string condizione = "1=1"
            , string ordinamento = "")
        {
            sql = "select "
                + " " + campi
                + " from MovimentiTessere "
                + " where " + condizione
                + " " + ordinamento;
            try
            {
                SqlDataAdapter com = new SqlDataAdapter(sql, Connessione.Connessione);
                DataTable dt = new DataTable();
                com.Fill(dt);
                return dt;
            }
            catch
            {
                return null;
            }
        }

        public List<MovimentoTessera> SelezionaTutto(string condizione = "1=1"
            , string ordinamento = "")
        {
            string sql = @"SELECT *
                            FROM MovimentiTessere";
            if (ordinamento != "")
                sql += " order by " + ordinamento;
            SqlDataAdapter com = new SqlDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<MovimentoTessera> listaRitorno = new List<MovimentoTessera>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    Docente persona = new Docente();
                    MovimentoTessera movTessera = new MovimentoTessera();
                    movTessera.Id = (Guid)row["id"];

                    if (row["idpersona"] != DBNull.Value)
                    {
                        persona.Nome = (string)row["nome"];
                        persona.Cognome = (string)row["cognome"];
                        if (row["note"] != DBNull.Value)
                            persona.Note = (string)row["note"];
                        persona.Id = (Guid)row["idpersona"];
                    }
                    movTessera.Persona = persona;
                    if (row["codicetessera"] != DBNull.Value)
                    {
                        movTessera.Tessera = new Model.Tessera();
                        movTessera.Tessera.Id = (Guid)row["idtessera"];
                        movTessera.Tessera.Codice = row["codicetessera"].ToString();
                    }
                    if (row["codicecorso"] != DBNull.Value)
                    {
                        movTessera.Attivita = new Model.Attivita();
                        movTessera.Attivita.Corso = new Corso();
                        movTessera.Attivita.Corso.Codice = row["codicecorso"].ToString();
                        movTessera.Attivita.Corso.Nome = row["nomecorso"].ToString();
                        movTessera.Attivita.Corso.DataInizio = (DateTime)row["datainizio"];
                        movTessera.Attivita.Corso.DataFine = (DateTime)row["datafine"];
                        if (row["numerostanza"] != DBNull.Value)
                        {
                            movTessera.Attivita.Stanza = new Stanza();
                            movTessera.Attivita.Stanza.Numero = Convert.ToInt16(row["numerostanza"]);
                        }
                    }
                    movTessera.DataMovimento = (DateTime)row["datamovimento"];
                    movTessera.Descrizione = row["descrizione"].ToString();
                    listaRitorno.Add(movTessera);
                }
            }
            return listaRitorno;
        }

        public Inserimento RegistraMovimento(Tessera Tessera, string Motivazione)
        {
            #region "Query"

            sql = @"insert into MovimentiTessere
                (id,idtessera,codicetessera,note,datamovimento,descrizione)
            values
                (@id
                ,@idtessera
                ,@codicetessera
                ,@note
                ,@datamovimento
                ,@descrizione)";

            #endregion "Query"

            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.DbType = DbType.Guid;
                id.Value = base.Id;
                cmd.Parameters.Add(id);

                SqlParameter idtessera = new SqlParameter();
                idtessera.ParameterName = "@idtessera";
                idtessera.DbType = DbType.Guid;
                idtessera.Value = Tessera.Id;
                cmd.Parameters.Add(idtessera);

                SqlParameter codicetessera = new SqlParameter();
                codicetessera.ParameterName = "@codicetessera";
                codicetessera.DbType = DbType.String;
                codicetessera.Value = Tessera.Codice;
                cmd.Parameters.Add(codicetessera);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = DBNull.Value;
                cmd.Parameters.Add(note);

                SqlParameter datamovimento = new SqlParameter();
                datamovimento.ParameterName = "@datamovimento";
                datamovimento.DbType = DbType.Date;
                datamovimento.Value = DateTime.Today.Date;
                cmd.Parameters.Add(datamovimento);

                SqlParameter descrizione = new SqlParameter();
                descrizione.ParameterName = "@descrizione";
                descrizione.DbType = DbType.String;
                descrizione.Value = Motivazione;
                cmd.Parameters.Add(descrizione);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Inserimento.Successo;
                else
                    return Inserimento.NoElementi;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        /// <summary>
        /// Inserisce un nuovo elemento nella tabelle MovimentiTessere
        /// </summary>
        /// <param name="persona"></param>
        /// <param name="attivita"></param>
        /// <param name="stanza"></param>
        /// <returns>Restituisce un oggetto inserimento</returns>
        public Inserimento Nuovo(Persona persona, Tessera tessera, Attivita attivita)
        {
            #region "Query"

            sql = @"insert into MovimentiTessere
            values
                (id=@id
                ,idtessera=@idtessera
                ,codicetessera=@codicetessera
                ,idpersona=@idpersona
                ,nome=@nome
                ,cognome=@cognome
                ,note=@note
                ,idattivita=@idattivita
                ,idcorso=@idcorso
                ,codicecorso=@codicecorso
                ,nomecorso=@nomecorso
                ,numerostanza=@numerostanza
                ,datainizio=@datainizio
                ,datafine=@datafine
                ,datamovimento=@datamovimento)";

            #endregion "Query"

            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.DbType = DbType.Guid;
                id.Value = base.Id;
                cmd.Parameters.Add(id);

                SqlParameter idtessera = new SqlParameter();
                idtessera.ParameterName = "@idtessera";
                idtessera.DbType = DbType.Guid;
                idtessera.Value = tessera.Id;
                cmd.Parameters.Add(idtessera);

                SqlParameter codicetessera = new SqlParameter();
                codicetessera.ParameterName = "@codicetessera";
                codicetessera.DbType = DbType.String;
                codicetessera.Value = tessera.Codice;
                cmd.Parameters.Add(codicetessera);

                SqlParameter idpersona = new SqlParameter();
                idpersona.ParameterName = "@idpersona";
                idpersona.DbType = DbType.Guid;
                idpersona.Value = persona.Id;
                cmd.Parameters.Add(idpersona);

                SqlParameter nome = new SqlParameter();
                nome.ParameterName = "@nome";
                nome.DbType = DbType.String;
                nome.Value = persona.Nome;
                cmd.Parameters.Add(nome);

                SqlParameter cognome = new SqlParameter();
                cognome.ParameterName = "@cognome";
                cognome.DbType = DbType.String;
                cognome.Value = persona.Cognome;
                cmd.Parameters.Add(cognome);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = persona.Note;
                note.Value = DBNull.Value;
                cmd.Parameters.Add(note);

                SqlParameter idattivita = new SqlParameter();
                idattivita.ParameterName = "@idattivita";
                idattivita.DbType = DbType.Guid;
                idattivita.Value = attivita.Id;
                cmd.Parameters.Add(idattivita);

                SqlParameter idcorso = new SqlParameter();
                idcorso.ParameterName = "@idcorso";
                idcorso.DbType = DbType.Guid;
                idcorso.Value = attivita.Corso.Id;
                cmd.Parameters.Add(idcorso);

                SqlParameter codicecorso = new SqlParameter();
                codicecorso.ParameterName = "@codicecorso";
                codicecorso.DbType = DbType.String;
                codicecorso.Value = attivita.Corso.Codice;
                cmd.Parameters.Add(codicecorso);

                SqlParameter nomecorso = new SqlParameter();
                nomecorso.ParameterName = "@nomecorso";
                nomecorso.DbType = DbType.String;
                nomecorso.Value = attivita.Corso.Nome;
                cmd.Parameters.Add(nomecorso);

                SqlParameter numerostanza = new SqlParameter();
                numerostanza.ParameterName = "@numerostanza";
                numerostanza.DbType = DbType.Int16;
                numerostanza.Value = attivita.Stanza.Numero;
                cmd.Parameters.Add(numerostanza);

                SqlParameter datainizio = new SqlParameter();
                datainizio.ParameterName = "@datainizio";
                datainizio.DbType = DbType.Date;
                datainizio.Value = attivita.Corso.DataInizio;
                cmd.Parameters.Add(datainizio);

                SqlParameter datafine = new SqlParameter();
                datafine.ParameterName = "@datainizio";
                datafine.DbType = DbType.Date;
                datafine.Value = attivita.Corso.DataFine;
                cmd.Parameters.Add(datafine);

                SqlParameter datamovimento = new SqlParameter();
                datamovimento.ParameterName = "@datamovimento";
                datamovimento.DbType = DbType.Date;
                datamovimento.Value = DateTime.Today.Date;
                cmd.Parameters.Add(datamovimento);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Inserimento.Successo;
                else
                    return Inserimento.NoElementi;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        /// <summary>
        /// Inserisce il movimento solo se si ha l'attività disponibile ma nessuna scheda associata
        /// </summary>
        /// <param name="persona">Persona a cui viente intestato il movimento</param>
        /// <param name="attivita">Attività a cui partecipava</param>
        /// <returns></returns>
        public Inserimento Nuovo(Persona persona, Attivita attivita)
        {
            #region "Query"

            sql = @"insert into MovimentiTessere
            values
                (id=@id
                ,idpersona=@idpersona
                ,nome=@nome
                ,cognome=@cognome
                ,note=@note
                ,idattivita=@idattivita
                ,idcorso=@idcorso
                ,codicecorso=@codicecorso
                ,nomecorso=@nomecorso
                ,numerostanza=@numerostanza
                ,datainizio=@datainizio
                ,datafine=@datafine
                ,datamovimento=@datamovimento)";

            #endregion "Query"

            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.DbType = DbType.Guid;
                id.Value = base.Id;
                cmd.Parameters.Add(id);

                SqlParameter idpersona = new SqlParameter();
                idpersona.ParameterName = "@idpersona";
                idpersona.DbType = DbType.Guid;
                idpersona.Value = persona.Id;
                cmd.Parameters.Add(idpersona);

                SqlParameter nome = new SqlParameter();
                nome.ParameterName = "@nome";
                nome.DbType = DbType.String;
                nome.Value = persona.Nome;
                cmd.Parameters.Add(nome);

                SqlParameter cognome = new SqlParameter();
                cognome.ParameterName = "@cognome";
                cognome.DbType = DbType.String;
                cognome.Value = persona.Cognome;
                cmd.Parameters.Add(cognome);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = persona.Note;
                note.Value = DBNull.Value;
                cmd.Parameters.Add(note);

                SqlParameter idattivita = new SqlParameter();
                idattivita.ParameterName = "@idattivita";
                idattivita.DbType = DbType.Guid;
                idattivita.Value = attivita.Id;
                cmd.Parameters.Add(idattivita);

                SqlParameter idcorso = new SqlParameter();
                idcorso.ParameterName = "@idcorso";
                idcorso.DbType = DbType.Guid;
                idcorso.Value = attivita.Corso.Id;
                cmd.Parameters.Add(idcorso);

                SqlParameter codicecorso = new SqlParameter();
                codicecorso.ParameterName = "@codicecorso";
                codicecorso.DbType = DbType.String;
                codicecorso.Value = attivita.Corso.Codice;
                cmd.Parameters.Add(codicecorso);

                SqlParameter nomecorso = new SqlParameter();
                nomecorso.ParameterName = "@nomecorso";
                nomecorso.DbType = DbType.String;
                nomecorso.Value = attivita.Corso.Nome;
                cmd.Parameters.Add(nomecorso);

                SqlParameter numerostanza = new SqlParameter();
                numerostanza.ParameterName = "@numerostanza";
                numerostanza.DbType = DbType.Int16;
                numerostanza.Value = attivita.Stanza.Numero;
                cmd.Parameters.Add(numerostanza);

                SqlParameter datainizio = new SqlParameter();
                datainizio.ParameterName = "@datainizio";
                datainizio.DbType = DbType.Date;
                datainizio.Value = attivita.Corso.DataInizio;
                cmd.Parameters.Add(datainizio);

                SqlParameter datafine = new SqlParameter();
                datafine.ParameterName = "@datainizio";
                datafine.DbType = DbType.Date;
                datafine.Value = attivita.Corso.DataFine;
                cmd.Parameters.Add(datafine);

                SqlParameter datamovimento = new SqlParameter();
                datamovimento.ParameterName = "@datamovimento";
                datamovimento.DbType = DbType.Date;
                datamovimento.Value = DateTime.Today.Date;
                cmd.Parameters.Add(datamovimento);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Inserimento.Successo;
                else
                    return Inserimento.NoElementi;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        /// <summary>
        /// Inserisce il movimento Tessera quando si ha il cambio di essa
        /// </summary>
        /// <param name="persona">Persona da inserire nel movimento</param>
        /// <param name="tessera">Tessera Associata alla Persona</param>
        /// <returns></returns>
        public Inserimento Nuovo(Persona persona, Tessera tessera)
        {
            #region "Query"

            sql = @"insert into MovimentiTessere
            (id, idtessera, codicetessera, idpersona, nome, cognome, note, datamovimento)
            values
                (@id
                ,@idtessera
                ,@codicetessera
                ,@idpersona
                ,@nome
                ,@cognome
                ,@note
                ,@datamovimento)";

            #endregion "Query"

            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.DbType = DbType.Guid;
                id.Value = base.Id;
                cmd.Parameters.Add(id);

                SqlParameter datamovimento = new SqlParameter();
                datamovimento.ParameterName = "@datamovimento";
                datamovimento.DbType = DbType.DateTime;
                datamovimento.Value = base.DataMovimento;
                cmd.Parameters.Add(datamovimento);

                SqlParameter idtessera = new SqlParameter();
                idtessera.ParameterName = "@idtessera";
                idtessera.DbType = DbType.Guid;
                idtessera.Value = tessera.Id;
                cmd.Parameters.Add(idtessera);

                SqlParameter codicetessera = new SqlParameter();
                codicetessera.ParameterName = "@codicetessera";
                codicetessera.DbType = DbType.String;
                codicetessera.Value = tessera.Codice;
                cmd.Parameters.Add(codicetessera);

                SqlParameter idpersona = new SqlParameter();
                idpersona.ParameterName = "@idpersona";
                idpersona.DbType = DbType.Guid;
                idpersona.Value = persona.Id;
                cmd.Parameters.Add(idpersona);

                SqlParameter nome = new SqlParameter();
                nome.ParameterName = "@nome";
                nome.DbType = DbType.String;
                nome.Value = persona.Nome;
                cmd.Parameters.Add(nome);

                SqlParameter cognome = new SqlParameter();
                cognome.ParameterName = "@cognome";
                cognome.DbType = DbType.String;
                cognome.Value = persona.Cognome;
                cmd.Parameters.Add(cognome);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = persona.Note;
                cmd.Parameters.Add(note);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Inserimento.Successo;
                else
                    return Inserimento.NoElementi;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        /// <summary>
        /// Inserisce in movimenti la Persona senza la tessera
        /// </summary>
        /// <param name="persona">Persona che si vuole inserire, senza la tessera</param>
        /// <returns></returns>
        public Inserimento Nuovo(Persona persona)
        {
            #region "Query"

            sql = @"insert into MovimentiTessere
            values
                (id=@id
                ,idpersona=@idpersona
                ,nome=@nome
                ,cognome=@cognome
                ,note=@note)";

            #endregion "Query"

            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.DbType = DbType.Guid;
                id.Value = base.Id;
                cmd.Parameters.Add(id);

                SqlParameter idpersona = new SqlParameter();
                idpersona.ParameterName = "@idpersona";
                idpersona.DbType = DbType.Guid;
                idpersona.Value = persona.Id;
                cmd.Parameters.Add(idpersona);

                SqlParameter nome = new SqlParameter();
                nome.ParameterName = "@nome";
                nome.DbType = DbType.String;
                nome.Value = persona.Nome;
                cmd.Parameters.Add(nome);

                SqlParameter cognome = new SqlParameter();
                cognome.ParameterName = "@cognome";
                cognome.DbType = DbType.String;
                cognome.Value = persona.Cognome;
                cmd.Parameters.Add(cognome);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = persona.Note;
                note.Value = DBNull.Value;
                cmd.Parameters.Add(note);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Inserimento.Successo;
                else
                    return Inserimento.NoElementi;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        /// <summary>
        /// Cancella dalla tabella MovimentiTessere una riga con id = id
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Un oggetto Cancellazione</returns>
        public Cancellazione Cancella(Guid id)
        {
            sql = "delete from MovimentiTessere "
                + " where id=@id";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@id";
                condizione.DbType = DbType.Guid;
                condizione.Value = id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        public Cancellazione Cancella(Tessera tessera)
        {
            sql = "delete from MovimentiTessere "
                + " where idtessera=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.DbType = DbType.Guid;
                condizione.Value = tessera.Id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        public Cancellazione Cancella(Persona persona)
        {
            sql = "delete from MovimentiTessere "
                + " where idpersona=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.DbType = DbType.Guid;
                condizione.Value = persona.Id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        public Cancellazione Cancella(Attivita corso)
        {
            sql = "delete from MovimentiTessere "
                + " where idattivita=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.DbType = DbType.Guid;
                condizione.Value = corso.Corso.Id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        /// <summary>
        /// Aggiorna una riga della tabella MovimentiTessere modificando solo i campi tessera
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Un oggetto Aggiornamento</returns>
        public Aggiornamento AggiornaTessera(Tessera tessera)
        {
            sql = "update MovimentiTessere "
                + " set codicetessera=@codicetessera"
                + " where idtessera=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter codicetessera = new SqlParameter();
                codicetessera.ParameterName = "@codicetessera";
                codicetessera.DbType = DbType.String;
                codicetessera.Value = tessera.Codice;
                cmd.Parameters.Add(codicetessera);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.DbType = DbType.Guid;
                condizione.Value = tessera.Id;
                cmd.Parameters.Add(condizione);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Aggiornamento.Successo;
                else
                    return Aggiornamento.NoElementi;
            }
            catch
            {
                return Aggiornamento.Errore;
            }
        }

        /// <summary>
        /// Aggiorna una riga della tabella MovimentiTessere modificando solo i campi persona
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Un oggetto Aggiornamento</returns>
        public Aggiornamento AggiornaPersona(Persona persona)
        {
            sql = "update MovimentiTessere "
                + " set nome=@nome"
                + ",cognome=@cognome"
                + ",note=@note"
                + " where idpersona=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter nome = new SqlParameter();
                nome.ParameterName = "@nome";
                nome.DbType = DbType.String;
                nome.Value = persona.Nome;
                cmd.Parameters.Add(nome);

                SqlParameter cognome = new SqlParameter();
                cognome.ParameterName = "@cognome";
                cognome.DbType = DbType.String;
                cognome.Value = persona.Cognome;
                cmd.Parameters.Add(cognome);

                SqlParameter note = new SqlParameter();
                note.ParameterName = "@note";
                note.DbType = DbType.String;
                note.Value = persona.Note;
                cmd.Parameters.Add(note);

                SqlParameter Id = new SqlParameter();
                Id.ParameterName = "@condizione";
                Id.DbType = DbType.Guid;
                Id.Value = persona.Id;
                cmd.Parameters.Add(Id);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Aggiornamento.Successo;
                else
                    return Aggiornamento.NoElementi;
            }
            catch
            {
                return Aggiornamento.Errore;
            }
        }

        /// <summary>
        /// Aggiorna una riga della tabella MovimentiTessere modificando solo i campi corso
        /// </summary>
        /// <param name="id"></param>
        /// <returns>Un oggetto Aggiornamento</returns>
        public Aggiornamento AggiornaCorso(Attivita attivita)
        {
            sql = "update MovimentiTessere "
                + " set idcorso=@idcorso,"
                + "codicecorso=@codicecorso"
                + ",nomecorso=@nomecorso"
                + ",numerostanza=@numerostanza"
                + ",datainizio=@datainizio"
                + ",datafine=@datafine"
                + " where idcorso=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, Connessione.Connessione);

                #region "Parametri"

                SqlParameter idcorso = new SqlParameter();
                idcorso.ParameterName = "@idcorso";
                idcorso.DbType = DbType.Guid;
                idcorso.Value = attivita.Corso.Id;
                cmd.Parameters.Add(idcorso);

                SqlParameter codicecorso = new SqlParameter();
                codicecorso.ParameterName = "@codicecorso";
                codicecorso.DbType = DbType.String;
                codicecorso.Value = attivita.Corso.Codice;
                cmd.Parameters.Add(codicecorso);

                SqlParameter nomecorso = new SqlParameter();
                nomecorso.ParameterName = "@nomecorso";
                nomecorso.DbType = DbType.String;
                nomecorso.Value = attivita.Corso.Nome;
                cmd.Parameters.Add(nomecorso);

                SqlParameter numerostanza = new SqlParameter();
                numerostanza.ParameterName = "@numerostanza";
                numerostanza.DbType = DbType.Int16;
                numerostanza.Value = attivita.Stanza.Numero;
                cmd.Parameters.Add(numerostanza);

                SqlParameter datainizio = new SqlParameter();
                datainizio.ParameterName = "@datainizio";
                datainizio.DbType = DbType.Date;
                datainizio.Value = attivita.Corso.DataInizio;
                cmd.Parameters.Add(datainizio);

                SqlParameter datafine = new SqlParameter();
                datafine.ParameterName = "@datafine";
                datafine.DbType = DbType.Date;
                datafine.Value = attivita.Corso.DataFine;
                cmd.Parameters.Add(datafine);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.DbType = DbType.Guid;
                condizione.Value = attivita.Id;
                cmd.Parameters.Add(condizione);

                #endregion "Parametri"

                if (cmd.ExecuteNonQuery() > 0)
                    return Aggiornamento.Successo;
                else
                    return Aggiornamento.NoElementi;
            }
            catch
            {
                return Aggiornamento.Errore;
            }

        #endregion "Metodi"
        }
    }
}